/* 
	Introduce: 原生封装ajax请求，仅支持GET和POST，表单接口请单独配置
	User: A <947707134@qq.com>
	Date: 2021-6-21
 */

// 请求地址，可根据不同路由统一配置
// const host = "http://192.168.1.125";
const host = "https://api.alicebj.cn/v1/article";

// api配置项，按照示例配置
const apis = {
	recommend: { url: `${host}/recommend`, method: "get" },
	list: { url: `${host}/list`, method: "get" },
}

// 请求封装
/* 
 api: 在对象apis中的key
 params: 跟在请求地址后拼接的参数
 data: post请求的参数
 */
function sendRequest(api, params, data) {
	const ajax = new XMLHttpRequest();
	const requestUrl = apis[api] && apis[api].url;
	const requestMethod = apis[api] && apis[api].method.toUpperCase();
	if (requestUrl && requestMethod) {
		// 配置params参数
		let concatStr = "";
		for (const key in params) {
			concatStr += `${key}=${params[key]}&`;
		}
		concatStr = concatStr.substring(concatStr, concatStr.length - 1);

		// 打开链接配置连接信息
		ajax.open(requestMethod, `
			${requestUrl}
			${concatStr === "" ? "" : "?" + concatStr}
		`);
		// 设置请求头
		ajax.setRequestHeader("Content-type", "application/json;charset=UTF-8");
		// 发送请求
		ajax.send(JSON.stringify(data));

		// 返回promise请求回应
		return new Promise((resolve, error) => {
			ajax.onreadystatechange = function () {
				if (ajax.readyState === 4 && ajax.status === 200) {
					resolve(JSON.parse(ajax.responseText));
				} else {
					// 捕捉状态，告知错误
					switch (ajax.status) {
						case 400:
							error("请求错误");
							break;
						case 401:
							error("token失效");
							break;
						case 403:
							error("拒绝访问");
							break;
						case 404:
							error(`请求地址出错：${requestUrl}`);
							break;
						case 408:
							error("请求超时");
							break;
						case 500:
							error("服务器内部错误");
							break;
						case 501:
							error("服务未实现");
							break;
						case 502:
							error("网关错误");
							break;
						case 503:
							error("服务不可用");
							break;
						case 504:
							error("网关超时");
							break;
						case 505:
							error("HTTP版本不受支持");
							break;
					}
				}
			}
		})
	} else {
		return new Promise(resolve => {
			const msg = `没有找到关于 “ ${api} ” 请求的配置项！请检查配置项中是否存在该请求！`;
			resolve(msg);
		})
	}
}